Nuevas estructuras de datos

PANDAs = PANel DAta Structure

pandas introduce tres nuevos tipos de estructura de datos:

  • Series : Es una estructura de datos de 1D, como si fuera un vector de datos con índices.

  • DataFrame : Es una estructura de datos de 2D, como si fuera un diccionario de Series.

  • Panel : Es una estructura de datos de nD (con $n \ge 3$), como si fuera un diccionario de DataFrames.

(imagen extraída de aquí)


In [ ]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(19760812)
%matplotlib inline

In [ ]:
s = pd.Series()

In [ ]:
df = pd.DataFrame()

In [ ]:
p = pd.Panel()

In [ ]:
print(s, df, p, sep = '\n' * 2)

Series

Una Series es un array indexado:

• Un NumPy array mapea un rango de números enteros a valores.

• Una Series mapea un grupo arbitrario de etiquetas a valores.

• Una Series se puede ver también como un diccionario especializado donde todos los valores poseen el mismo tipo y se encuentran almacenados de forma eficiente.


In [ ]:
s = pd.Series({'a' : 1000, 'b' : 2000, 'c' : 3000, 'd' : 4000})

In [ ]:
s['b']

Para acceder a las etiquetas se usa el atributo s.index mientras que para acceder a los valores se usa el atributo s.values (NumPy array).


In [ ]:
help(pd.Series)

In [ ]:
lista = [1,10,100,1000]
dicc = {'a': 1, 'b': 10, 'c': 100, 'd': 1000}

In [ ]:
# creación a partir de una lista
s1 = pd.Series(data = lista, index = ['a','b','c','d'], name = 'Mi Serie')

In [ ]:
# creación a partir de un diccionario
s2 = pd.Series(data = dicc, name = 'Mi Serie')

In [ ]:
# cread s3 a partir de un numpy array

In [ ]:
s1

In [ ]:
s2

In [ ]:
s1.index

In [ ]:
s1.values

In [ ]:
# Acceder a un elemento, como si fuera un diccionario
s1['a']

In [ ]:
# Acceder a un elemento como si fuera un numpy array
s1[0]

In [ ]:
s1[0:3]

In [ ]:
s1['a':'c']

In [ ]:
# Se pueden añadir nuevos elementos como si fuera un diccionario
s1['e'] = 10000

In [ ]:
s1

In [ ]:
s2

In [ ]:
# Podemos hacer operaciones como si fueran numpy arrays
s1 / 10

In [ ]:
# Alineamiento de índices, las operaciones se hacen vía índice
s1 + s2

DataFrame

Un DataFrame puede considerarse que es como un diccionario de Series que comparten índices comunes:

Dataframes tienen índices para filas (index) y columnas (columns).

• Cada columna puede poseer un tipo de dato diferente.

• Añadir nuevas columnas es 'barato'.


In [ ]:
df = pd.DataFrame(np.random.randn(10, 3), columns = ['col1', 'col2', 'col3'])

In [ ]:
df

Pensad en un DataFrame como en una 'pestaña' (hoja) de una hoja de cálculos, o en una tabla en una Base de Datos SQL.


In [ ]:
help(pd.DataFrame)

In [ ]:
# Cread un dataframe a partir de s1 y s2

In [ ]:
# Cread un dataframe a partir de un diccionario de numpy arrays

In [ ]:
# Se puede acceder a una columna (una Series) como si accediéramos a la clave de un diccionario
df['col1']

In [ ]:
# Podemos acceder a los índices como si fuera una Series
df.index

In [ ]:
# Además, podemos acceder a las columnas
df.columns

Panel

Se puede ver como un diccionario de DataFrames.

Para no sobrecargar el vistazo que vamos a hacer a pandas no hablaremos más sobre Paneles ya que es una estructura de datos que se usa menos en la práctica.


In [ ]:
help(pd.Panel)